#include "mainwindow.h"

MainWindow::MainWindow()
{
    //_________________________________________________________________________Menu
    menuFichier = menuBar()->addMenu("&Fichier");
    actionQuitter = menuFichier->addAction("&Quitter");
    connect(actionQuitter, SIGNAL(triggered()), qApp, SLOT(quit()));

    //_________________________________________________________________________Partie centrale de l'interface
    centerWidget = new QWidget;
    setCentralWidget(centerWidget);
    layoutMain = new QHBoxLayout;
    layoutBot = new QHBoxLayout;

    layoutVideo = new QBoxLayout(QBoxLayout::LeftToRight);
    layoutVideo->setSizeConstraint(QLayout::SetMaximumSize);

    centerWidget->setLayout(layoutMain);
    centerWidget->setPalette(QColor(255,255,255));
    centerWidget->setAutoFillBackground(true);

    //_________________________________________________________________________Zone de contrôle pour commander les tests
    butStart = new QPushButton("Lancer");
    butVideo = new QPushButton("Video");
    butConfig = new QPushButton("Config");
    butStop = new QPushButton("Stop");
    butStart->setMaximumWidth(120);
    butVideo->setMaximumWidth(120);
    butConfig->setMaximumWidth(120);
    butStop->setMaximumWidth(120);

    butStop->setEnabled(false);

    butZone = new QVBoxLayout();
    butZone->addWidget(butStart);
    butZone->addWidget(butVideo);
    butZone->addWidget(butConfig);
    butZone->addWidget(butStop);

    connect(butStart, SIGNAL(clicked()), this, SLOT(launchTest()));
    connect(butConfig, SIGNAL(clicked()), this, SLOT(displayConfig()));
    connect(butStop, SIGNAL(clicked()), this, SLOT(stopTest()));
    connect(butVideo, SIGNAL(clicked()), this, SIGNAL(butVideoClicked()));

    //_________________________________________________________________________Console Log pour afficher des informations sur le deroulement du test
    console = new QTextEdit();
//    console->setPalette(QColor(0,0,0));
//    console->setAutoFillBackground(true);
    console->setText("");
    console->setMinimumHeight(125);
    console->setMaximumHeight(125);
    console->setReadOnly(true);

    //_________________________________________________________________________Zone d'affichage d'un compteur du test
    timeDisplay = new QVBoxLayout();

    infoZone = new QHBoxLayout();
    infoZone->addWidget(console);
    infoZone->addLayout(timeDisplay);

    layoutMain->addLayout(infoZone);
    layoutMain->addLayout(butZone);

    timer = new TimerTest(timeDisplay);

    //_________________________________________________________________________Fenetre de configuration pour definir les options du test
    config = new Config();
    connect(config, SIGNAL(closed()), this, SLOT(closeConfig()));
    openConfig = false;
}

MainWindow::~MainWindow(){}

void MainWindow::closeEvent(QCloseEvent *event)
// On capte la fermeture pour fermer egalement la fenetre de configuration
{
    emit closed();
    config->close();
}

void MainWindow::displayConfig()
// Fonction de fermeture ou d'ouverture de la fenetre de configuration
{
    if(openConfig){
        config->close();
    }
    else{
        config->show();
        butConfig->setFont(QFont(QApplication::font().toString(), -1, -1, true));
        openConfig = true;
    }
}

void MainWindow::closeConfig()
// Fonction de fermeture de la fenetre de configuration
{
    openConfig = false;
    butConfig->setFont(QFont(QApplication::font().toString(), -1, -1, false));
}

void MainWindow::launchTest()
{
    // Gestion des boutons et indication de lancement du test
    butStart->setEnabled(false);
    butConfig->setEnabled(false);
    butStop->setEnabled(true);

    QString str = "" + console->toHtml();
    str += QTime::currentTime().toString()+" | Lancement du test.</br>";
    console->setText(str);
    console->verticalScrollBar()->setValue(console->verticalScrollBar()->maximum());

    timer->start();
    emit testLaunched();
}

void MainWindow::stopTest()
{
    // Gestion des boutons et indication de fin de test
    butStart->setEnabled(true);
    butConfig->setEnabled(true);
    butStop->setEnabled(false);

    QString str = "" + console->toHtml();
    str += QTime::currentTime().toString()+" | Test termine.</br>";
    console->setText(str);
    console->verticalScrollBar()->setValue(console->verticalScrollBar()->maximum());

    timer->stop();
    emit testStopped();
}

